﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.Objects;
using Entidades;
using System.Collections;
using System.Data.SqlClient;

namespace CapaDatos.Adapters
{
  public  class PagarInscripcionAdapter
    {


       BDRinconLuzEntities contexto;

       public PagarInscripcionAdapter()
        {
            contexto = RinconLuzContext.Context;
        }

       public PagarInscripcionAdapter(string edicion)
        {
            contexto = RinconLuzContext.ContextNew;
        }

        public void Agregar(PagoInscripcion entidad)
        {
            if (entidad == null)
            {
                throw new ArgumentNullException("entidad", "La entidad no puede ser nula.");
            }

            if (entidad.ChangeTracker != null && entidad.ChangeTracker.State == ObjectState.Added)
            {
                contexto.RegistrarCambios(entidad);
                contexto.RealizarCambios();
            }
        }

        public void Eliminar(PagoInscripcion entidad)
        {
            if (entidad == null)
            {
                throw new ArgumentNullException("entidad", "La entidad no puede ser nula.");
            }

            IObjectSet<PagoInscripcion> objectSet = contexto.CrearSet<PagoInscripcion>();

            objectSet.Attach(entidad);
            objectSet.DeleteObject(entidad);
        }



        public void Modificar(PagoInscripcion entidad)
        {
            if (entidad == null)
            {
                throw new ArgumentNullException("entidad", "La entidad no puede ser nula.");
            }

            if (entidad.ChangeTracker != null && (entidad.ChangeTracker.State & ObjectState.Deleted) != ObjectState.Deleted)
            {
                entidad.MarkAsModified();
            }

            contexto.SaveChanges();
        }


        public IEnumerable<PagoInscripcion> Obtener()
        {
            return contexto.CrearSet<PagoInscripcion>();
        }


        public List<ViewEntity> ObtenerAlumnosSinPagoInscripcion()
        {

            List<ViewEntity> ListaFinal = new List<ViewEntity>();

            var Legajos = (from v in contexto.InscripcionCicloLectivo
                           where v.Turno.CicloLectivo.FechaDesde.Value.Year == DateTime.Now.Year &&
                           v.Eliminada != true
                           select v.LegajoAlumno).Except(from v in contexto.PagoInscripcion
                                                         where v.CicloLectivo.FechaDesde.Value.Year == DateTime.Now.Year &&
                                                                 v.Eliminada != true
                                                         select v.Alumno.LegajoAlumno);

            if (Legajos.Count() > 0)
            {
                var Lista = (from v in contexto.Alumno
                             where Legajos.Contains(v.LegajoAlumno)
                             select v).ToList();


                foreach (var item in Lista)
                {
                    ListaFinal.Add(new ViewEntity(item.LegajoAlumno, item.ApellidoAlumno + ", " + item.NombreAlumno + " / DNI: " + item.DniAlumno));

                }

                ListaFinal = ListaFinal.OrderBy(v => v.Descripcion).ToList();
            }

            return ListaFinal;
        }


        public List<ViewEntity> ObtenerInscripcionesPagasPorAño(int año)
        {

            List<ViewEntity> ListaFinal = new List<ViewEntity>();

            var Legajos = (from v in contexto.PagoInscripcion
                           where v.CicloLectivo.FechaDesde.Value.Year == año &&
                           v.Eliminada != true
                           select v.LegajoAlumno).ToList();

            if (Legajos.Count() > 0)
            {
                var Lista = (from v in contexto.Alumno
                             where Legajos.Contains(v.LegajoAlumno)
                             select v).ToList();


                foreach (var item in Lista)
                {
                    ListaFinal.Add(new ViewEntity(item.LegajoAlumno, item.ApellidoAlumno + ", " + item.NombreAlumno + " / DNI: " + item.DniAlumno));

                }

                ListaFinal = ListaFinal.OrderBy(v => v.Descripcion).ToList();
            }

            return ListaFinal;
        }

        public PagoInscripcion ObtenerEntidadParaEditar(Guid legajoAlumno, int año)
        {


            var Entidad = (from v in contexto.PagoInscripcion.Include("Alumno").Include("CicloLectivo")
                           where v.CicloLectivo.FechaDesde.Value.Year == año &&
                                v.Alumno.LegajoAlumno == legajoAlumno &&
                               v.Eliminada != true
                               select v).First();


            return Entidad;
        }


        public string ExisteEntidad(Guid legajoAlumno, Guid idCicloLectivo)
        {


            var Existe = (from v in contexto.PagoInscripcion
                           where v.CicloLectivo.IdCicloLectivo == idCicloLectivo &&
                                v.Alumno.LegajoAlumno == legajoAlumno &&
                               v.Eliminada != true
                           select v).Any();

            if (Existe)
                return "Si";
            else
                return "No";
        }



    }
}
